Data availability and data protection are key aspects of storage solutions and determine the reliability of a system. The more robust an algorithm is in providing data availability and data protection, the more reliability the system has and the more the user's information will be protected. Users can typically tolerate short periods of time when they cannot access the information in the storage subsystem, but they cannot tolerate the permanent loss of their data. There are many reasons that data can get lost in the storage subsystem. The following is a short list of examples: hardware failure, software failure, and power failure. Some of these can be solved with the following approaches. One way to protect against hardware failure is with the use of RAID algorithms. These algorithms use redundant information on other drives to recreate the data on the failed drive when a new drive replaces the failed drive. These algorithms are standard practice in the industry. But, RAID only protects against a hardware failure. There are still potential ways that data can be lost when power is lost during the write of data to the drive. These writes take a finite amount of time and if the power is lost during this time, then the data that is being written may only get partially written or not at all. This can have a large impact, not only on the integrity of the data, but also on the consistency of the RAID algorithm. The partially written data will no longer match the redundant data on another drive. RAID controllers remove the data integrity problem by adding a battery-backed cache to the RAID controller. The cache is used as a buffer to store the write data until it has been successfully written to disk. Once that data has been successfully written to disk, the data can be deleted from the cache. The battery is used to keep the write data valid across power cycles. After power is lost and the data has not been successfully written to disk, then the controller will reattempt to write the data to the disk after the power has returned. The disadvantage of this solution is the cost of the battery and the cost of the external memory for the cache data.
One of the biggest issues with the RAID algorithms is to maintain the consistency of the data between the real data and the redundant data information. This is also known as keeping the data synchronized. One of the ways that data can get unsynchronized is when the write to the real data disk completes, but the write to the redundant data information disk does not complete successfully. The solution to this problem is to detect when one write completes and the other write does not. Logging the write information to each disk and keeping track of when each one completes can detect when the writes do not complete. This is known as Write Journaling. The logging information must be kept in some type of non-volatile memory to keep the logged information valid across power cycles. The entry in the write journal will be deleted when all writes complete. If an entry is detected at power-on, then the data can be resynchronized only on the region affected by this write command. Placing the non-volatile memory external to the controller is not a cost effective solution.
Therefore, it would be desirable to provide a method, circuit, and system for providing an internal memory to a bus interface controller card or chip.